# -*- coding: UTF-8 -*-
# from common_libs import Setup
from fastapi import FastAPI

from dispatcher.common_utils import constants
from dispatcher.routers import dispatch_api


app = FastAPI(title="调度系统", version="1.0")
# fixme 基础包的配置问题
# fixme 任务的消费应该都是从redis中取值，如果celery突然崩溃，那么由缓存继续接受任务，太多的任务就持久化处理
# celery 突然崩溃也没有问题，因为celery会把任务缓存到redis中，celery重启后悔重新执行任务
# fixme 日志系统

# todo 调度系统，包括前置的日志持久化的保障系统，包括消息的解析系统，包括请求发送过得处理系统，包括日志处理后的信息收集系统（持久化日志），除了第一个其他都应该是celery任务
# 消费者有两种消费方式，一种是push_base模型，由消费队列（broker）调用consumer的接口，这会导致一个问题，当producter速率大于consumer速率时，可能会导致consumer不堪重负（拒绝服务攻击），但是只可以保证consumer永远是最大速率消费，
# 另一种模型师 pull_base模型，由consumer调用消费队列（broker)的接口，这就可以保证consumer不超载，实现削峰


@app.on_event('startup')
async def startup_event():
    constants.SERVER_NAME = "dispatcher"  # 自定义服务名
    app.include_router(dispatch_api, prefix='/dispatcher/v1')

    # await Setup.init_base(app, constants.SERVER_NAME)
    # await Setup.init_cache()
    # await Setup.init_db(app, dir="dispatcher.models")

    # 这里是建立了连接池，以后只需要从池中获取连接，或者关闭连接就行，而不用直接关闭连接池